import { reqLogin, reqGetUserInfo, reqGetUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
import { setToken, getToken, removeToken } from '@/utils/auth'

// 在 state 里面先声明一个变量，用于存token
const state = {
  token: getToken() || '', // 用于存token
  userInfo: {}

}
// 在mutations 里面修改token
const mutations = {
  // 设置token -及对token 进行实时更新保存和cookie存储
  setToken(state, newToken) {
    // 把先获取到大token 存到本地
    state.token = newToken
    // console.log(state.token)

    // 把新获取到的token 存到Cookie中-这个方法是封装好的工具函数
    setToken(newToken)
  },
  // 移出 token
  removeToken(state) {
    state.token = ''
    removeToken()
  },
  // 设置 userInfo
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },

  // 移出用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
  //
}
const actions = {
  // 异步操作，发请求得来的token 进行异步更新-需要提交mutation

  // 登录成功需要跳转到首页-失败需要给用户提示信息-用p
  async login(context, data) {
    const res = await reqLogin(data)
    const newToken = res.data
    context.commit('setToken', newToken)
    return res
  },

  // 获取用户资料的 action
  async getUserInfo(context) {
    const { data: data1 } = await reqGetUserInfo()

    const { data: data2 } = await reqGetUserDetailById(data1.userId)
    // 头像+基本信息
    const baseResult = { ...data1, ...data2 }
    context.commit('setUserInfo', baseResult)
    return baseResult
  },
  // 退出登录 layout 清除token  和 userInfo
  logout(context) {
    // 1.移出token
    context.commit('removeToken')

    // 2.移出vuex 个人信息
    context.commit('removeUserInfo')
    // 3.重置路由
    resetRouter()
    // 4.重置路由中的信息
    context.commit('permission/setRoutes', [], { root: true })
  }
}
const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}

